package com.yiyuan.app.dao;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.guaike.core.mybatis.plugins.BaseDAO;
import com.yiyuan.app.entity.enums.DailyTaskActionEnum;
import com.yiyuan.app.entity.enums.TaskStatusEnum;
import com.yiyuan.app.entity.po.MRecordTaskDailyPO;
import com.yiyuan.app.mapper.MRecordTaskDailyMapper;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Repository;

import java.time.LocalDate;
import java.util.List;

@Repository
@AllArgsConstructor
public class MRecordTaskDailyDAO extends BaseDAO<MRecordTaskDailyMapper, MRecordTaskDailyPO> {


    public List<MRecordTaskDailyPO> findUserTodayList(Long userId, LocalDate today) {
        LambdaQueryWrapper<MRecordTaskDailyPO> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(MRecordTaskDailyPO::getUserId, userId);
        queryWrapper.eq(MRecordTaskDailyPO::getRecordDate, today);
        queryWrapper.orderByAsc(MRecordTaskDailyPO::getSortIndex);
        return getBaseMapper().selectList(queryWrapper);
    }

    public long findUserTodayCount(Long userId, LocalDate today) {
        LambdaQueryWrapper<MRecordTaskDailyPO> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(MRecordTaskDailyPO::getUserId, userId);
        queryWrapper.eq(MRecordTaskDailyPO::getRecordDate, today);
        return getBaseMapper().selectCount(queryWrapper);
    }

    public List<MRecordTaskDailyPO> findUserTodayAction(Long userId, LocalDate today, Integer action) {
        LambdaQueryWrapper<MRecordTaskDailyPO> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(MRecordTaskDailyPO::getUserId, userId);
        queryWrapper.eq(MRecordTaskDailyPO::getRecordDate, today);
        queryWrapper.eq(MRecordTaskDailyPO::getAction, action);
        return getBaseMapper().selectList(queryWrapper);
    }

    public int updateFirstRecharge(Long userId, LocalDate today) {
        LambdaUpdateWrapper<MRecordTaskDailyPO> updateWrapper = new LambdaUpdateWrapper<>();
        updateWrapper.set(MRecordTaskDailyPO::getStatus, TaskStatusEnum.unclaimed.getCode());
        updateWrapper.eq(MRecordTaskDailyPO::getUserId, userId);
        updateWrapper.eq(MRecordTaskDailyPO::getAction, DailyTaskActionEnum.recharge.getCode());
        updateWrapper.eq(MRecordTaskDailyPO::getStatus, TaskStatusEnum.go_complete.getCode());
        updateWrapper.eq(MRecordTaskDailyPO::getRecordDate, today);
        return getBaseMapper().update(new MRecordTaskDailyPO(), updateWrapper);
    }

    public int updateFirstBattle(Long userId, LocalDate today) {
        LambdaUpdateWrapper<MRecordTaskDailyPO> updateWrapper = new LambdaUpdateWrapper<>();
        updateWrapper.set(MRecordTaskDailyPO::getStatus, TaskStatusEnum.unclaimed.getCode());
        updateWrapper.eq(MRecordTaskDailyPO::getUserId, userId);
        updateWrapper.eq(MRecordTaskDailyPO::getAction, DailyTaskActionEnum.challenge.getCode());
        updateWrapper.eq(MRecordTaskDailyPO::getStatus, TaskStatusEnum.go_complete.getCode());
        updateWrapper.eq(MRecordTaskDailyPO::getRecordDate, today);
        return getBaseMapper().update(new MRecordTaskDailyPO(), updateWrapper);
    }

    public int updateCompleteTask(Long userId, LocalDate today) {
        LambdaUpdateWrapper<MRecordTaskDailyPO> updateWrapper = new LambdaUpdateWrapper<>();
        updateWrapper.set(MRecordTaskDailyPO::getStatus, TaskStatusEnum.unclaimed.getCode());
        updateWrapper.eq(MRecordTaskDailyPO::getUserId, userId);
        updateWrapper.eq(MRecordTaskDailyPO::getAction, DailyTaskActionEnum.all_complete.getCode());
        updateWrapper.eq(MRecordTaskDailyPO::getStatus, TaskStatusEnum.go_complete.getCode());
        updateWrapper.eq(MRecordTaskDailyPO::getRecordDate, today);
        return getBaseMapper().update(new MRecordTaskDailyPO(), updateWrapper);
    }
}
